package com.panda.web.utils.task;

import com.panda.web.entity.product.OpenidProduct;
import com.panda.web.mapper.product.OpenidProductMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.List;

@Component
public class ProductTask {


    @Autowired
    OpenidProductMapper openidProductMapper;

    @Async
    @Scheduled(cron = "0 0 0 * * ?") // Cron 表达式：每天凌晨 00:00 执行
//    @Scheduled(cron = "*/10 * * * * ?") // Cron 表达式：每天凌晨 00:00 执行
    public void dailyTask() {
//        System.out.println("定时任务开始执行...");

        try {
            // 示例：查询所有产品并处理
            String status = "0";
            Long productId = 1l;
            List<OpenidProduct> products = openidProductMapper.findAllProducts(status, productId);//查询 所有 status = 0的，并且productId不等于1
            if (products != null && !products.isEmpty()) {
                for (OpenidProduct product : products) {
                    String day = product.getDay(); // 产品天数
                    String creationTime = product.getCreationTime(); // 创建时间 yyyy-MM-dd HH:mm:ss
                    // 检查是否过期
                    if (isExpired(day, creationTime)) {
                        // 如果过期，更新状态为 1
                        product.setStatus("1");
                        openidProductMapper.updateById(product);
                    }
                }
            }
        } catch (Exception e) {
            System.err.println("定时任务执行失败: " + e.getMessage());
        }
//        System.out.println("定时任务执行完成。");
    }
    /**
     * 检查产品是否过期
     *
     * @param day          产品天数
     * @param creationTime 创建时间
     * @return 是否过期
     */
    private boolean isExpired(String day, String creationTime) {
        try {
            // 解析创建时间
            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
            LocalDateTime purchaseTime = LocalDateTime.parse(creationTime, formatter);

            // 计算到期时间
            int productDays = Integer.parseInt(day); // 将天数转换为整数
            LocalDateTime expiryTime = purchaseTime.plusDays(productDays);

            // 获取当前时间
            LocalDateTime now = LocalDateTime.now();

            // 判断是否过期
            return now.isAfter(expiryTime);
        } catch (Exception e) {
            System.err.println("检查过期状态失败: " + e.getMessage());
            return false; // 如果发生错误，默认未过期
        }
    }

}